package com.atguigu.myrule;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 修改ribbon默认的负载均衡算法 默认轮询修改为随机
 */
@Configuration
public class MyselfRule {
    /**
     * 一:
     * 负载均衡轮询算法的原理公式: rest接口请求的次数 % 服务器集群总数 = 实际调用服务器位置下标
     * 每次重启服务后rest接口计数从1开始
     * 现有8001,8002两台服务，服务器集群总数为2
     * 第1次请求   1 %  2 = 1    index=1
     * 第2次请求   2 %  2 = 0    index=0
     * 第3次请求   3 %  2 = 1    index=1
     * 第4次请求   4 %  2 = 0    index=0
     *
     * 二：
     * 通过这个接口获取对应集群下的各个服务相关的信息:
     * List<ServiceInstance> instanceList = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
     *  for (ServiceInstance instance : instanceList) {
     *             logger.info(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());
     *         }
     *
     *  三：
     * 根据一获取的下标index获取二instanceList中的数据
     * 如  list[index]
     *     list[0] instance  = instance.getHost() + "\t" + instance.getPort()
     *     list[1] instance  = instance.getHost() + "\t" + instance.getPort()
     * @return
     */
    @Bean
    public IRule myRule() {
        return new RandomRule();//定义为随机
    }
}
